🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / database / src / main / kotlin / org / meshtastic / core / database / model / Node.kt
Displaying Raw • Download
core/database/src/main/kotlin/org/meshtastic/core/database/model/Node.kt 1c3784235e7e20ed88e054097d2e7addbff92dc3 (1c378423) Text, 7.15 KB
T8b949e/*
* Copyright (c) 2025 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.database.model
Tff7b72import T7ee787android.graphics.Color
Tff7b72import T7ee787com.google.protobuf.ByteString
Tff7b72import T7ee787com.google.protobuf.kotlin.isNotEmpty
Tff7b72import T7ee787org.meshtastic.core.database.entity.NodeEntity
Tff7b72import T7ee787org.meshtastic.core.model.util.GPSFormat
Tff7b72import T7ee787org.meshtastic.core.model.util.UnitConversions.celsiusToFahrenheit
Tff7b72import T7ee787org.meshtastic.core.model.util.latLongToMeter
Tff7b72import T7ee787org.meshtastic.core.model.util.toDistanceString
Tff7b72import T7ee787org.meshtastic.proto.ConfigProtos
Tff7b72import T7ee787org.meshtastic.proto.ConfigProtos.Config.DisplayConfig
Tff7b72import T7ee787org.meshtastic.proto.MeshProtos
Tff7b72import T7ee787org.meshtastic.proto.PaxcountProtos
Tff7b72import T7ee787org.meshtastic.proto.TelemetryProtos.DeviceMetrics
Tff7b72import T7ee787org.meshtastic.proto.TelemetryProtos.EnvironmentMetrics
Tff7b72import T7ee787org.meshtastic.proto.TelemetryProtos.PowerMetrics
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72data Tff7b72class T56d364NodeTb4b4b4(
Tff7b72val Te6edf3numTb4b4b4: Tffa657IntTb4b4b4,
Tff7b72val Te6edf3metadataTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3DeviceMetadataTff7b72? Tff7b72= Tff7b72nullTb4b4b4,
Tff7b72val Te6edf3userTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3User Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3UserTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3positionTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3Position Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3snrTb4b4b4: Tffa657Float Tff7b72= Tffa657FloatTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Tff7b72val Te6edf3rssiTb4b4b4: Tffa657Int Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Tff7b72val Te6edf3lastHeardTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4, T8b949e// the last time we've seen this node in secs since 1970
Tff7b72val Te6edf3deviceMetricsTb4b4b4: Te6edf3DeviceMetrics Tff7b72= Te6edf3DeviceMetricsTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3channelTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tff7b72val Te6edf3viaMqttTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3hopsAwayTb4b4b4: Tffa657Int Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tff7b72val Te6edf3isFavoriteTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3isIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3environmentMetricsTb4b4b4: Te6edf3EnvironmentMetrics Tff7b72= Te6edf3EnvironmentMetricsTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3powerMetricsTb4b4b4: Te6edf3PowerMetrics Tff7b72= Te6edf3PowerMetricsTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3paxcounterTb4b4b4: Te6edf3PaxcountProtosTb4b4b4.Te6edf3Paxcount Tff7b72= Te6edf3PaxcountProtosTb4b4b4.Te6edf3PaxcountTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3publicKeyTb4b4b4: Te6edf3ByteString? Tff7b72= Tff7b72nullTb4b4b4,
Tff7b72val Te6edf3notesTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3manuallyVerifiedTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3colorsTb4b4b4: Te6edf3PairTff7b72<Tffa657IntTb4b4b4, Tffa657IntTff7b72>
Tff7b72getTb4b4b4(Tb4b4b4) Tb4b4b4{ T8b949e// returns foreground and background @ColorInt for each 'num'
Tff7b72val Te6edf3r Tff7b72= Tb4b4b4(Te6edf3num Te6edf3and T79c0ff0Te6edf3xFF0000Tb4b4b4) Te6edf3shr T79c0ff1T79c0ff6
Tff7b72val Te6edf3g Tff7b72= Tb4b4b4(Te6edf3num Te6edf3and T79c0ff0Te6edf3x00FF00Tb4b4b4) Te6edf3shr T79c0ff8
Tff7b72val Te6edf3b Tff7b72= Te6edf3num Te6edf3and T79c0ff0Te6edf3x0000FF
Tff7b72val Te6edf3brightness Tff7b72= Tb4b4b4(Tb4b4b4(Te6edf3r Tff7b72* T79c0ff0.299Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3g Tff7b72* T79c0ff0.587Tb4b4b4) Tff7b72+ Tb4b4b4(Te6edf3b Tff7b72* T79c0ff0.114Tb4b4b4)Tb4b4b4) Tff7b72/ T79c0ff2T79c0ff5T79c0ff5
Tff7b72return Tb4b4b4(Tff7b72if Tb4b4b4(Te6edf3brightness Tff7b72> T79c0ff0.5Tb4b4b4) Te6edf3ColorTb4b4b4.Te6edf3BLACK Tff7b72else Te6edf3ColorTb4b4b4.Te6edf3WHITETb4b4b4) Te6edf3to Te6edf3ColorTb4b4b4.Te6edf3rgbTb4b4b4(Te6edf3rTb4b4b4, Te6edf3gTb4b4b4, Te6edf3bTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3isUnknownUser
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3userTb4b4b4.Te6edf3hwModel Tff7b72=Tff7b72= Te6edf3MeshProtosTb4b4b4.Te6edf3HardwareModelTb4b4b4.Te6edf3UNSET
Tff7b72val Te6edf3hasPKC
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3publicKeyTb4b4b4)Tb4b4b4.Te6edf3isNotEmptyTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3mismatchKey
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3publicKeyTb4b4b4) Tff7b72=Tff7b72= Te6edf3NodeEntityTb4b4b4.Te6edf3ERROR_BYTE_STRING
Tff7b72val Te6edf3hasEnvironmentMetricsTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3environmentMetrics Tff7b72!Tff7b72= Te6edf3EnvironmentMetricsTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hasPowerMetricsTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3powerMetrics Tff7b72!Tff7b72= Te6edf3PowerMetricsTb4b4b4.Te6edf3getDefaultInstanceTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3batteryLevel
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3deviceMetricsTb4b4b4.Te6edf3batteryLevel
Tff7b72val Te6edf3voltage
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3deviceMetricsTb4b4b4.Te6edf3voltage
Tff7b72val Te6edf3batteryStr
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tff7b72if Tb4b4b4(Te6edf3batteryLevel Tff7b72in T79c0ff1.Tb4b4b4.T79c0ff1T79c0ff0T79c0ff0Tb4b4b4) Ta5d6ff"Tffd700$Te6edf3batteryLevelTa5d6ff%Ta5d6ff" Tff7b72else Ta5d6ff"Ta5d6ff"
Tff7b72val Te6edf3latitude
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3positionTb4b4b4.Te6edf3latitudeI Tff7b72* T79c0ff1e-7
Tff7b72val Te6edf3longitude
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3positionTb4b4b4.Te6edf3longitudeI Tff7b72* T79c0ff1e-7
Tff7b72private Tff7b72fun Td2a8ffhasValidPositionTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3latitude Tff7b72!Tff7b72= T79c0ff0.0 Tff7b72&Tff7b72&
Te6edf3longitude Tff7b72!Tff7b72= T79c0ff0.0 Tff7b72&Tff7b72&
Tb4b4b4(Te6edf3latitude Tff7b72>Tff7b72= Tff7b72-T79c0ff9T79c0ff0 Tff7b72&Tff7b72& Te6edf3latitude Tff7b72<Tff7b72= T79c0ff9T79c0ff0.0Tb4b4b4) Tff7b72&Tff7b72&
Tb4b4b4(Te6edf3longitude Tff7b72>Tff7b72= Tff7b72-T79c0ff1T79c0ff8T79c0ff0 Tff7b72&Tff7b72& Te6edf3longitude Tff7b72<Tff7b72= T79c0ff1T79c0ff8T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3validPositionTb4b4b4: Te6edf3MeshProtosTb4b4b4.Te6edf3PositionTff7b72?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3positionTb4b4b4.Te6edf3takeIf Tb4b4b4{ Te6edf3hasValidPositionTb4b4b4(Tb4b4b4) Tb4b4b4}
T8b949e// @return distance in meters to some other node (or null if unknown)
Tff7b72fun Td2a8ffdistanceTb4b4b4(Te6edf3oTb4b4b4: Te6edf3NodeTb4b4b4)Tb4b4b4: Tffa657Int? Tff7b72= Tff7b72when Tb4b4b4{
Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3oTb4b4b4.Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72-Tff7b72> Tff7b72null
Tff7b72else Tff7b72-Tff7b72> Te6edf3latLongToMeterTb4b4b4(Te6edf3latitudeTb4b4b4, Te6edf3longitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3latitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3longitudeTb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tb4b4b4}
T8b949e// @return formatted distance string to another node, using the given display units
Tff7b72fun Td2a8ffdistanceStrTb4b4b4(Te6edf3oTb4b4b4: Te6edf3NodeTb4b4b4, Te6edf3displayUnitsTb4b4b4: Te6edf3DisplayConfigTb4b4b4.Te6edf3DisplayUnitsTb4b4b4)Tb4b4b4: Tffa657String? Tff7b72=
Te6edf3distanceTb4b4b4(Te6edf3oTb4b4b4)Tff7b72?.Te6edf3toDistanceStringTb4b4b4(Te6edf3displayUnitsTb4b4b4)
T8b949e// @return bearing to the other position in degrees
Tff7b72fun Td2a8ffbearingTb4b4b4(Te6edf3oTb4b4b4: Te6edf3Node?Tb4b4b4)Tb4b4b4: Tffa657Int? Tff7b72= Tff7b72when Tb4b4b4{
Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3oTff7b72?.Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72-Tff7b72> Tff7b72null
Tff7b72else Tff7b72-Tff7b72> Te6edf3orgTb4b4b4.Te6edf3meshtasticTb4b4b4.Te6edf3coreTb4b4b4.Te6edf3modelTb4b4b4.Te6edf3utilTb4b4b4.Te6edf3bearingTb4b4b4(Te6edf3latitudeTb4b4b4, Te6edf3longitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3latitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3longitudeTb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffgpsStringTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3GPSFormatTb4b4b4.Te6edf3toDecTb4b4b4(Te6edf3latitudeTb4b4b4, Te6edf3longitudeTb4b4b4)
Tff7b72private Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffgetDisplayStringsTb4b4b4(Te6edf3isFahrenheitTb4b4b4: Tffa657BooleanTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tb4b4b4{
Tff7b72val Te6edf3temp Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3temperature Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isFahrenheitTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ff%.1f°FTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3temperatureTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Ta5d6ff"Ta5d6ff%.1f°CTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3temperatureTb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}
Tff7b72val Te6edf3humidity Tff7b72= Tff7b72if Tb4b4b4(Te6edf3relativeHumidity Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Ta5d6ff"Ta5d6ff%.0f%%Ta5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3relativeHumidityTb4b4b4) Tff7b72else Tff7b72null
Tff7b72val Te6edf3soilTemperatureStr Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3soilTemperature Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3isFahrenheitTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ff%.1f°FTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3celsiusToFahrenheitTb4b4b4(Te6edf3soilTemperatureTb4b4b4)Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Ta5d6ff"Ta5d6ff%.1f°CTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3soilTemperatureTb4b4b4)
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}
Tff7b72val Te6edf3soilMoistureRange Tff7b72= T79c0ff0.Tb4b4b4.T79c0ff1T79c0ff0T79c0ff0
Tff7b72val Te6edf3soilMoisture Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3soilMoisture Tff7b72in Te6edf3soilMoistureRange Tff7b72&Tff7b72& Te6edf3soilTemperature Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Ta5d6ff"Ta5d6ff%d%%Ta5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3soilMoistureTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}
Tff7b72val Te6edf3voltage Tff7b72= Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voltage Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Ta5d6ff"Ta5d6ff%.2fVTa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voltageTb4b4b4) Tff7b72else Tff7b72null
Tff7b72val Te6edf3current Tff7b72= Tff7b72if Tb4b4b4(Te6edf3current Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Ta5d6ff"Ta5d6ff%.1fmATa5d6ff"Tb4b4b4.Te6edf3formatTb4b4b4(Te6edf3currentTb4b4b4) Tff7b72else Tff7b72null
Tff7b72val Te6edf3iaq Tff7b72= Tff7b72if Tb4b4b4(Te6edf3iaq Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Ta5d6ff"Ta5d6ffIAQ: Tffd700$Te6edf3iaqTa5d6ff" Tff7b72else Tff7b72null
Tff7b72return Te6edf3listOfNotNullTb4b4b4(
Te6edf3paxcounterTb4b4b4.Te6edf3getDisplayStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3tempTb4b4b4,
Te6edf3humidityTb4b4b4,
Te6edf3soilTemperatureStrTb4b4b4,
Te6edf3soilMoistureTb4b4b4,
Te6edf3voltageTb4b4b4,
Te6edf3currentTb4b4b4,
Te6edf3iaqTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Te6edf3PaxcountProtosTb4b4b4.Td2a8ffPaxcountTb4b4b4.Te6edf3getDisplayStringTb4b4b4(Tb4b4b4) Tff7b72=
Ta5d6ff"Ta5d6ffPAX: Tffd700${Te6edf3ble Tff7b72+ Te6edf3wifiTffd700}Ta5d6ff (B:Tffd700$Te6edf3bleTa5d6ff/W:Tffd700$Te6edf3wifiTa5d6ff)Ta5d6ff"Tb4b4b4.Te6edf3takeIf Tb4b4b4{ Te6edf3ble Tff7b72!Tff7b72= T79c0ff0 Tff7b72|Tff7b72| Te6edf3wifi Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}
Tff7b72fun Td2a8ffgetTelemetryStringsTb4b4b4(Te6edf3isFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tff7b72=
Te6edf3environmentMetricsTb4b4b4.Te6edf3getDisplayStringsTb4b4b4(Te6edf3isFahrenheitTb4b4b4)
Tb4b4b4}
Tff7b72fun Te6edf3ConfigProtosTb4b4b4.Td2a8ffConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTff7b72?.Te6edf3isUnmessageableRoleTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Tff7b72this Tff7b72in
Te6edf3listOfTb4b4b4(
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3REPEATERTb4b4b4,
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3ROUTERTb4b4b4,
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3ROUTER_LATETb4b4b4,
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3SENSORTb4b4b4,
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3TRACKERTb4b4b4,
Te6edf3ConfigProtosTb4b4b4.Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3TAK_TRACKERTb4b4b4,
Tb4b4b4)
Served by rngit 1.5.0 - Generated in 0.07s